package com.jcli.jb51_net.article._232524碰撞小球;

import javax.swing.*;
import java.awt.*;

/**
 * @ClassName DrowJPs
 * @Description TODO
 * @Author li
 * @Data 2023/12/23 10:36
 * @Version 1.0
 */
public class DrowJPs extends JPanel implements Runnable {
    //存储椭圆的随机位置、大小、速度、颜色成分（红、绿、蓝）。
    int[] x = new int[1000], y = new int[1000], s = new int[1000], xt = new int[1000], yt = new int[1000];
    int[] r = new int[1000], g = new int[1000], b = new int[1000];

    /**
     * 定义要绘制的椭圆的数量
     */
    static int num = 5;

    /**
     * 初始化随机数生成器。
     * 为每一个椭圆随机生成初始位置、大小、速度和颜色。
     * 创建两个线程t和t1来运行DrowJPs实例。每个线程都会执行动画。
     */
    public DrowJPs() {
        for (int i = 0; i < 1000; i++) {
            x[i] = (int) (Math.random() * 450);
            y[i] = (int) (Math.random() * 230);
            s[i] = (int) (Math.random() * 200 + 20);
            xt[i] = (int) (Math.random() * 4 + 1);
            yt[i] = (int) (Math.random() * 4 + 1);
            r[i] = (int) (Math.random() * 256);
            g[i] = (int) (Math.random() * 256);
            b[i] = (int) (Math.random() * 256);
        }
        Thread t = new Thread(this);
        Thread t1 = new Thread(this);
        t.start();
        t1.start();
    }

    public static void addNum(int i) {
        if (i == 0) {
            if (num < 20)
                num++;
        } else {
            if (num > 1)
                num--;
        }
    }

    /**
     * 重写了JPanel的paint方法，用于绘制椭圆。
     * 设置背景色为粉红色。
     * 对于每一个椭圆，根据其颜色和位置绘制一个椭圆。
     *
     * @param gr
     */
    public void paint(Graphics gr) {
        super.paint(gr);
        setBackground(Color.PINK);
        for (int i = 0; i < num; i++) {
            gr.setColor(new Color(r[i], g[i], b[i]));
            gr.fillOval(x[i], y[i], s[i], s[i]);//椭圆
        }
    }

    @Override
    public void run() {
        while (true) {
            for (int i = 0; i < num; i++) {
                if (x[i] <= 0 | x[i] >= (790 - s[i])) xt[i] *= -1;
                if (y[i] <= 0 | y[i] >= (465 - s[i])) yt[i] *= -1;
                x[i] += xt[i];
                y[i] += yt[i];
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                repaint();
            }
        }
    }
}
